[Linux]04 大数据常用命令 四

调度|执行|软连接

Posted by 李玉坤 on 2018-02-28

调度工具crontab

比如一个可执行文件test.sh
文件内容

1
2
3
#!/bin/bash (解释器)

date

执行这个shell脚本需要x执行权限
执行命令

1
2
./test.sh
sh ./test.sh

后缀 .sh 和 第一行#!/bin/bash 没有,sh命令去执行也可以执行成功

1
2
[root@hadoop ~]# crontab -l
* * * * * /root/test.sh >> /root/test.log

每个星号代表的意思:分 小时 日 月 周
*/6 代表每隔六[分钟 ]
*/1=* 代表每一分钟

如何按照每10s执行一次?

可以修改脚本来完成任务,crontab不必改变

1
2
3
4
5
6
7
8
9
10
11
12
[root@hadoop ~]# cat test1.sh 
#!/bin/bash

for((i=1;i<=6;i++));
do

date
sleep 10s

done

exit

后台执行

1
2
3
./test.sh &
nohup ./test.sh & 手动启动脚本 看日志 开发维护 测试 直接输出到了nohup.out文件里了
nohup ./test.sh > /root/test.log 2>&1 & 生产上规范化输出文件名

软连接

假设公司有两个版本的MySQL,有两个版本的文件夹

1
2
3
4
5
[root@hadoop ~]# ll
总用量 32
-rw-------. 1 root root 1520 4月 14 2019 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 12月 14 10:37 mysql5.6
drwxr-xr-x. 2 root root 6 12月 14 10:37 mysql5.7

一开始肯定使用的低版本,如果要升级到高版本怎么方便?

1
2
3
4
5
6
7
[root@hadoop ~]# ln -s /root/mysql5.6 /root/mysql
[root@hadoop ~]# ll
总用量 32
-rw-------. 1 root root 1520 4月 14 2019 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 14 12月 14 10:40 mysql -> /root/mysql5.6
drwxr-xr-x. 2 root root 6 12月 14 10:37 mysql5.6
drwxr-xr-x. 2 root root 6 12月 14 10:37 mysql5.7

在使用软连接后我们所有的MySQL相关路径只要配置/root/mysql软连接的目标path即可。

创建软连接方式:ln -s 原path 目标path

a.CDH升级 原文件不见了 光标会跳动进行提示:

两种方法
1、找原文件文件夹;
2、 删除快捷键文件文件夹(rm -rf /root/mysql)–》重新做新的软连接 (升级高版本操作也是这个操作:删除、重做)

b.个人建议 绝对路径

c.系统盘 / 50G
数据盘 /data01 1T SSD

大数据的默认日志都是在/var/log里
比如

1
2
3
4
5
6
CDH log(默认保留10份) :
/var/log/hbase/xxx.log 1G
/var/log/hbase/xxx.log1 1G
...
/var/log/hbase/xxx.log10 1G
---- 11G

改动之前停服务,然后进行以下操作

1
2
3
mkdir /data01/log/
mv /var/log/hbase /data01/log/
ln -s /data01/log/hbase /var/log/hbase

注意: 权限问题chmod chown,因为移动的时候会发生权限变更(软连接文件夹和源文件夹都要进行修改)

1、如果不记得移动后的权限,可以参考另一台节点的相对目录来设置权限
2、实在懒得比对就全改为777

修改机器名称

centos7.x
[root@JD ~]# hostnamectl
   Static hostname: JD
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 983e7d6ed0624a2499003862230af382
           Boot ID: c78cf2bffbea43d8a88110b3b8fa0c5f
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-327.el7.x86_64
      Architecture: x86-64
[root@JD ~]# hostnamectl --help
hostnamectl [OPTIONS...] COMMAND ...

Query or change system hostname.

  -h --help              Show this help
     --version           Show package version
     --no-ask-password   Do not prompt for password
  -H --host=[USER@]HOST  Operate on remote host
  -M --machine=CONTAINER Operate on local container
     --transient         Only set transient hostname
     --static            Only set static hostname
     --pretty            Only set pretty hostname

Commands:
  status                 Show current hostname settings
  set-hostname NAME      Set system hostname
  set-icon-name NAME     Set icon name for host
  set-chassis NAME       Set chassis type for host
  set-deployment NAME    Set deployment environment for host
  set-location NAME      Set location for host

[root@JD ~]# hostnamectl set-hostname hadoop001

[root@hadoop001 ~]# cat /etc/hostname 
hadoop001

[root@hadoop001 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.3 hadoop001

jps真正使用

位置在哪

[hadoop@hadoop001 ~]$ which jps
/usr/java/jdk1.8.0_45/bin/jps
[hadoop@hadoop001 ~]$ 

[hadoop@hadoop001 ~]$ jps
2594 NameNode
2724 DataNode
3061 ResourceManager
3173 NodeManager
3526 Jps
2879 SecondaryNameNode
[hadoop@hadoop001 ~]$ jps --help
illegal argument: --help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]
[hadoop@hadoop001 ~]$ jps -l
2594 org.apache.hadoop.hdfs.server.namenode.NameNode
2724 org.apache.hadoop.hdfs.server.datanode.DataNode
3061 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
3173 org.apache.hadoop.yarn.server.nodemanager.NodeManager
3610 sun.tools.jps.Jps
2879 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
[hadoop@hadoop001 ~]$ 

对应的进程的标识文件在哪?

# 可以进入这个文件夹查看jps得出的进程号对应的详情文件
[root@hadoop001 tmp]# ll
drwxr-xr-x 2 hadoop  hadoop  61 Nov 30 21:23 hsperfdata_hadoop

进程是 hadoop启动的 默认存储在 /tmp/hsperfdata_username

作用

查询 pid 进程名称

process information unavailable CDH

进程所属的用户 去执行 jps命令,只显示自己的相关的进程信息

root用户 看所有的,但是显示不可用:process information unavailable

真假判断 :

# 判断显示为process information unavailable 是否真的不可用
[root@hadoop001 hsperfdata_hadoop]# ps -ef|grep 31488 
root       5291   3912  0 21:32 pts/1    00:00:00 grep --color=auto 31488
[root@hadoop001 hsperfdata_hadoop]# 

#自己过滤自己 count为0
[root@hadoop001 hsperfdata_hadoop]# ps -ef|grep 31488 | grep -v grep | wc -l
0
#查看一个可用的进程,自己过滤自己 count为1
[root@hadoop001 hsperfdata_hadoop]# ps -ef|grep 2594 | grep -v grep | wc -l
1
[root@hadoop001 hsperfdata_hadoop]# 

jps查看文件 不影响 进程的启动和停止

jps看的就是文件的记录,如果讲文件mv移走,jps是看不出来进程是否有问题(实际mv走文件,进程本身无问题)

建议使用ps来查看进程,特别是脚本中。

Linux机制 oom-kill机制

free -m 查看机器的内存情况

某个进程 memory 使用过高,机器为了保护自己,放置夯住,去杀死内存使用最多的进程。
比如 5806 kill

kill log info 断了 cat log找error是找不到的
VM 2G CDH mysql+server ok 挂了

意识到:
以后进程挂了–》log位置–》error:
cat /var/log/messages | grep oom

有error具体分析;
没 想到oom机制;

Linux机制 /tmp默认存储周期 1个月 会自动清空不在规则以内的文件

[root@hadoop001 tmp]# cat yarn-hadoop-nodemanager.pid
7855
[root@hadoop001 tmp]# 

#建议调整sh执行文件下的PID目录,不要把大数据任何目录放入tmp
[hadoop@hadoop001 hadoop]$ vi hadoop-env.sh
export HADOOP_PID_DIR=/home/hadoop/tmp

[hadoop@hadoop001 hadoop]$ cat yarn-env.sh
export YARN_PID_DIR=/home/hadoop/tmp

[hadoop@hadoop001 ~]$ cd tmp
[hadoop@hadoop001 tmp]$ ll
total 20
-rw-rw-r-- 1 hadoop hadoop 6 Nov 30 22:05 hadoop-hadoop-datanode.pid
-rw-rw-r-- 1 hadoop hadoop 6 Nov 30 22:05 hadoop-hadoop-namenode.pid
-rw-rw-r-- 1 hadoop hadoop 6 Nov 30 22:05 hadoop-hadoop-secondarynamenode.pid
-rw-rw-r-- 1 hadoop hadoop 6 Nov 30 22:03 yarn-hadoop-nodemanager.pid
-rw-rw-r-- 1 hadoop hadoop 6 Nov 30 22:02 yarn-hadoop-resourcemanager.pid
[hadoop@hadoop001 tmp]$